import hashlib


def get_shard_index(p_id):
    num_shards = 128
    hasher = hashlib.md5()
    # 将整数转换为字节流（模拟Go语言中按大端序写入的方式，Python里使用网络字节序即大端序）
    p_id_bytes = p_id.to_bytes(length=(p_id.bit_length() + 7) // 8, byteorder='big')
    hasher.update(p_id_bytes)
    hash_result = hasher.digest()
    # 提取哈希结果的前4个字节，并转换为整数（模拟Go语言中从字节切片按大端序解析为uint32类型的操作）
    hash_value = int.from_bytes(hash_result[:4], byteorder='big')
    return hash_value % num_shards

if __name__ == '__main__':
    print(get_shard_index(32718))